﻿using ShoppingOnline.App_Code;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web.UI.WebControls;

namespace ShoppingOnline
{
    public partial class Check : System.Web.UI.Page
    {
        private static string u_ID = "", g_ID = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            // 在页面加载时进行判断，如果不是提交数据回传的页面，则执行getMasterCar()方法
            if (!IsPostBack)
            {
                getMasterCar();
            }
        }

        protected void btn_Click(object sender, EventArgs e)
        {
            // 当点击按钮时，获取按钮的CommandArgument属性值，将其赋给g_ID变量
            LinkButton btn = (LinkButton)sender;
            g_ID = btn.CommandArgument.ToString();

            // 构造删除商品的SQL语句和参数数组
            string strudp = "delete from tb_mastercar where userid=@u_ID and goodsid=@g_ID";
            SqlParameter[] paras = 
            {
                new SqlParameter("@u_ID",u_ID),
                new SqlParameter("@g_ID",g_ID)
            };
            // 调用SqlHelper.ExecNonQuery方法执行SQL语句，返回受影响行数
            int flag = SqlHelper.ExecNonQuery(strudp, paras);

            // 判断删除操作是否成功
            if (flag > 0)
            {
                // 删除成功，重新加载购物车数据并返回
                getMasterCar();
                return;
            }
            else
            {
                // 删除失败，重新加载购物车数据，并在页面上弹出提示框提示用户重新加入购物车
                getMasterCar();
                Response.Write("<script>alert('删除出错，请重新加入购物车')</script>");
            }
        }


        protected void btnToOrder_Click(object sender, EventArgs e)
        {
            // 定义订单号、订单状态和订单总价变量
            string oNum = "";           //订单号
            string oState = "";         //订单状态
            string oPrice = "";         //订单总价

            // 获取用户ID，该信息存储在Session["userid"]中
            u_ID = Session["userid"].ToString();
            LinkButton btn = (LinkButton)sender;

            // 获取按钮的CommandArgument属性值，将其赋给g_ID变量
            g_ID = btn.CommandArgument.ToString();
            //生成订单信息
            DateTime date = DateTime.Now;
            Random ra = new Random();
            oNum = ra.Next(100).ToString() + ra.Next(100).ToString();

            // 构造查询商品信息的SQL语句
            string sql1 = "select * from tb_goods where goodsid=" + g_ID;

            // 执行SQL语句，获取查询结果的DataTable对象
            DataTable dt = SqlHelper.ExecDataSet(sql1).Tables[0];
            int stock = 0;
            int f_add = 0;

            // 判断查询结果是否为空
            if (dt.Rows.Count > 0)
            {
                DataRow dataRow = dt.Rows[0];

                // 获取商品价格和库存
                oPrice = dataRow["goodsprice"].ToString();
                stock =Convert.ToInt32(dataRow["goodsprice"]);
            }

            // 设置订单状态为"正在配送"
            oState = "正在配送";

            // 判断库存是否足够
            if (stock > 0)
            {
                // 构造插入订单的SQL语句和参数数组
                string strAdd = "insert into tb_order(orderid,ordertime,ordermoney,orderstates,userid,goodsid) values(@orderid,@ordertime,@ordermoney,@orderstates,@userid,@goodsid)";
                SqlParameter[] parasadd = 
                {
                    new SqlParameter("@orderid",oNum),
                    new SqlParameter("@ordertime",date.ToShortDateString().ToString()),
                    new SqlParameter("@ordermoney",oPrice),
                    new SqlParameter("@orderstates",oState),
                    new SqlParameter("@userid",u_ID),
                    new SqlParameter("@goodsid",g_ID)
                };
                // 调用SqlHelper.ExecNonQuery方法执行插入订单的SQL语句，返回受影响行数
                f_add = SqlHelper.ExecNonQuery(strAdd, parasadd);
            }
            else
            {
                Response.Write("<script>alert('暂时缺货，请联系店长');</script>");
            }

            // 判断插入订单操作是否成功
            if (f_add > 0)
            {
                DataRow dataRow = dt.Rows[0];
                int a = Convert.ToInt32(dataRow["goodsstock"]);

                // 判断商品库存是否大于0
                if (a > 0)
                {
                    a--;
                    // 更新商品库存
                    string updateNum = "update tb_goods set goodsstock=@a where goodsid=@g_ID ";
                    SqlParameter[] sql3 =
                    {
                        new SqlParameter("@a",a),
                        new SqlParameter("@g_ID",g_ID)
                    };
                    // 执行更新库存的SQL语句
                    SqlHelper.ExecNonQuery(updateNum,sql3);

                    // 重新加载购物车数据，并在页面上弹出提示框提示用户购买成功
                    getMasterCar();
                    Response.Write("<script>alert('购买成功，请单击“订单”查看详细信息');</script>");

                }
            }
            else
            {
                // 插入订单失败，重新加载购物车数据，并在页面上弹出提示框提示用户重新下订单
                Response.Write("<script>alert('购买出错，请重新下订单')</script>");
                return;
            }
        }

        // 获取购物车信息的方法
        private void getMasterCar()
        {
            // 判断Session中是否存在userid，如果存在则获取购物车数据，否则跳转到用户登录页面
            if (Session["userid"] != null)
            {
                StringBuilder listString = new StringBuilder();
                u_ID = Session["userid"].ToString();
                // 构造查询购物车数据的SQL语句和参数数组
                string struser = "select goodsid,goodsname,goodspicture,goodsprice from mastercarList where userid=@u_ID";
                SqlParameter[] paras = 
                {
                    new SqlParameter("@u_ID",u_ID),
                };

                // 执行查询购物车数据的SQL语句，获取查询结果的DataTable对象
                DataTable dataTable = SqlHelper.ExecDataSet(struser,paras).Tables[0];

                // 判断查询结果是否为空
                if (dataTable.Rows.Count > 0)
                {
                    // 绑定数据，并将数据绑定到Repeater控件上
                    rptbind.DataSource = dataTable;
                    rptbind.DataBind();
                }
            }
            else
            {
                // 不存在userid，跳转到用户登录页面
                Response.Redirect("userLogin.aspx");
            }
        }
    }
}